/**
 * 模块配置议程
 * 该议程定义了模块的相关配置，包括模块名称、API 路径、会议室接口定义、表格列配置、检索配置和添加配置。
 * @module meetingRoomsConfig
 */
export const moduleName = '参会人员'
export const moduleApi = '/api/player'
// 根据模块字段（注释部分的模块字段）生成接口、tableColumns、addParams、searchParams，需要注意的是需要严格按照当前已有的格式不要随便调整字段，相应的字段上都有备注的参数

// 模块字段
// "activityId": "string",
// "employeesUserId": "string",
// "name": "string",
// "hotelCheckinId": "string",
// "mobile": "string",
// "attendMeetingStatus": 0
export interface Player {
  activityId: string
  employeesUserId: string
  name: string
  hotelCheckinId: string
  mobile: string
  attendMeetingStatus: number
}

const mockData: Player[] = []

/**
 * 表格列配置
 * @param {string} label - 列的标题
 * @param {string} prop - 对应的数据字段
 * @param {string} component - 使用的组件类型 (input, select, date, imgUpload, dateRange, timeRange)
 * @param {string} minWidth - 最小宽度（可选）
 */
const tableColumns = ref<any>([
  // { label: '员工用户ID', prop: 'employeesUserId' },
  { label: '姓名', prop: 'name' },
  // { label: '酒店入住ID', prop: 'hotelCheckinId' },
  { label: '手机号', prop: 'mobile' },
  { label: '账号', prop: 'userInfo.username' },
  {
    label: '住宿签到',
    prop: 'hotelCheckinInfo',
    minWidth: '180px',
    slotName: 'hotelCheckinInfo', // 使用插槽来自定义渲染
  },
  {
    label: '签到状态',
    prop: 'isCheck',
    minWidth: '100px',
    dictionary: {
      true: '已签到',
      false: '未签到',
    },
  },
  {
    label: '请假状态',
    prop: 'isLeave',
    minWidth: '100px',
    component: 'Tags',
    format: (row: any) => [row.isLeave ? '已请假' : '-'],
    componentProps: (row: any) => ({ types: [row.isLeave ? 'danger' : 'info'] }),
  },
  // {
  //   label: '职务',
  //   prop: 'userInfo.postsMiddle',
  //   minWidth: '100px',
  //   component: 'Tags',
  //   format: (row: any) => {
  //     if (!row.userInfo?.postsMiddle) return []
  //     return Array.isArray(row.userInfo.postsMiddle)
  //       ? row.userInfo.postsMiddle.map((item: any) => {
  //           return item?.posts?.name || '-'
  //         })
  //       : []
  //   },
  // },
  // {
  //   label: '组织',
  //   prop: 'userInfo.dept.name',
  //   minWidth: '100px',
  // },
  // {
  //   label: '签到时间',
  //   prop: 'checkTime',
  //   minWidth: '100px',
  // },
])

/**
 * 获取检索配置参数
 * 返回的对象包含以下属性:
 * @param {string} label - 检索项的标题
 * @param {string} prop - 对应的数据字段
 * @param {string} component - 使用的组件类型 (input, select, date, imgUpload, dateRange, timeRange)
 * @param {string} placeholder - 输入框的占位符（可选）
 */
const searchParams = () => [
  { label: '姓名', prop: 'name', component: 'input', placeholder: '请输入姓名' },
  { label: '手机号', prop: 'mobile', component: 'input', placeholder: '请输入手机号' },
  // {
  //   label: '部门',
  //   prop: 'deptId',
  //   component: 'TreeSelect',
  //   placeholder: '请选择部门',
  //   required: true,
  //   rules: [{ required: true, message: '请选择部门' }],
  // },
  // {
  //   label: '职务',
  //   prop: 'postsId',
  //   component: 'DutySelect',
  //   placeholder: '请选择职务',
  //   // required: true,
  //   format: (value: any) => {
  //     if (!value) return []
  //     if (Array.isArray(value)) {
  //       return value
  //         .map((item: any) => {
  //           // 如果是编辑时的完整对象
  //           if (typeof item === 'object' && item.posts) {
  //             return Number(item.posts.id)
  //           }
  //           // 如果是对象但没有 posts
  //           if (typeof item === 'object' && item.postsId) {
  //             return Number(item.postsId)
  //           }
  //           if (typeof item === 'object' && item.id) {
  //             return Number(item.id)
  //           }
  //           // 如果直接是数字
  //           return Number(item)
  //         })
  //         .filter(Boolean)
  //     }
  //     return []
  //   },
  //   // 添加 transform 函数来处理初始值
  //   transform: (value: any) => {
  //     if (!value) return []
  //     if (Array.isArray(value)) {
  //       return value
  //         .map((item) => {
  //           if (typeof item === 'object') {
  //             if (item.posts) {
  //               return Number(item.posts.id)
  //             }
  //             if (item.postsId) {
  //               return Number(item.postsId)
  //             }
  //             if (item.id) {
  //               return Number(item.id)
  //             }
  //           }
  //           return Number(item)
  //         })
  //         .filter(Boolean)
  //     }
  //     return []
  //   },
  //   // 添加 transformBack 函数来处理回显
  //   transformBack: (value: any) => {
  //     if (!value) return []
  //     if (Array.isArray(value)) {
  //       return value
  //         .map((item) => {
  //           if (typeof item === 'object' && item.posts) {
  //             return Number(item.posts.id)
  //           }
  //           if (typeof item === 'object' && item.postsId) {
  //             return Number(item.postsId)
  //           }
  //           return Number(item)
  //         })
  //         .filter(Boolean)
  //     }
  //     return []
  //   },
  // },
  // { label: '参会状态', prop: 'attendMeetingStatus', component: 'input', placeholder: '请输入参会状态' },
]

/**
 * 获取添加参数
 * @param {string} label - 添加项的标题
 * @param {string} prop - 对应的数据字段
 * @param {string} required - 是否必填
 * @param {object} rule - 校验规则（可选），若不为 null，则表示该字段需要进行校验
 * @param {function} validator - 校验函数，若校验规则采用自动形式，需要通过validator传入校验函数
 * @param {number} colSpan - 列的跨度（可选）
 * @param {string} component - 使用的组件类型 ('input' | 'input-number' | 'select' | 'switch' | 'textarea' | 'date-picker' | 'time-picker' | 'time-picker' | 'img-upload')
 * @param {string} placeholder - 输入框的占位符（可选）
 */
const addParams = ref<any>([
  { label: '员工用户ID', prop: 'employeesUserId', required: true, component: 'input', placeholder: '请输入员工用户ID' },
  { label: '姓名', prop: 'name', required: true, component: 'input', placeholder: '请输入姓名' },
  { label: '手机号', prop: 'mobile', required: true, component: 'input', placeholder: '请输入手机号' },
  // { label: '参会状态', prop: 'attendMeetingStatus', required: true, component: 'input', placeholder: '请输入参会状态' },
])

export { addParams, mockData, searchParams, tableColumns }
